<?php
/**
 * 
 * Mój projekt todo oparty na datagridzie i zendformach
 * @author damian 25-07-2012
 *
 */
class DgDamianController extends Zend_Controller_Action
{
   
	public $cos='testwlasnosc';
	public $paginate=null;
	
	private $model;
	/**
	 * sciezka dostepu do modulu np. zend/halloword/public/DataGridDamian
	 * @var string
	 */
	private $sciezka;
	
	/*
	 * @param $db Zend_Db_Adapter_Abstract 
	 */
	private $db=null;
	
	# dodanie tutuaj konstruktora nie jest takie proste bo wywala blad :)
	/*
	public function __construct()
	{
		parent::__construct(); //lepiej aby bylo choc mozliwe ze nie jest potrzebne
		$this->model = new Application_Model_DbTable_Osoba(); // standardowo nie ma tego w ksiazce ale sadze ze to dobra proktyka
	}
	*/
	
	
    public function init()
    {
    	# /zend/halloword/public/DataGridDamian/datagrid zwraca getRequest
    	$sciezka=$this->getRequest();
    	Application_Model_Narzedziowe_CVarDumper::dodaj($sciezka,'sciezka');
    	$sciezka = new Zend_Controller_Request_Http();
    	$this->sciezka="http://".$_SERVER['SERVER_NAME'].$sciezka->getBaseUrl().$sciezka->getPathInfo();
    	Application_Model_Narzedziowe_CVarDumper::dodaj($this->sciezka);
    	
        /* Initialize action controller here */
    	//$this->model = new Application_Model_DbTable_Osoba(); // standardowo nie ma tego w ksiazce ale sadze ze to dobra proktyka
    }

    /**
     * Ajaxowe wywołanie
     */
    public function indexAction()
    {
 
    /*
   		#pobranie rekordow i w widoku wyswietlenie ich w formie tabelarycznej - narazie bez PAGINACJI
        $DbTable = new Application_Model_DbTable_Osoba();
        $this->view->objects=$DbTable->fetchAll();
       
       	# Przyklad pracy z includowana dynamicznie moja klasa zewnetrzna znajdujaca sie w modelu
      	 $test= new Application_Model_testowaOgolna(); //todo narzie nie dziala niewiem dlaczego
     */
  
    	$flaga_ajax=false;	
    	$this->view->flaga_ajax=false; // wykorzystana w widoku do sprawdzenia czy jest to widok ajax czy normalny bo robi je 1 plik 
    	 #uruchominie ajaxowych modulow
    	if( $_POST['etap']=='ajax' )  
        {  
            $flaga_ajax=true;
            $this->view->flaga_ajax=true;  
            //  $this->_helper->viewRenderer->setNoRender(); //wtedy nic mi nie zwróci widok ajax ? nie wiem dlaczego
	 		$this->_helper->getHelper('layout')->disableLayout();
        }
      
            
            # uwtorzenie modelu połączenie z bazą , utowrzenie widoku
            if(isset($_POST['page']))  
            {  
                $page = $_POST['page'];  
            }  
            else  
            {  
                $page = 1;  
            }
 
            $page_order = null;  
            $page_order_type= null;  
            # kontroler sortowanie 
            if(isset($_POST['order']) && isset($_POST['type']) )  
            {  
                $page_order = $_POST['order'];  
                $page_order_type= $_POST['type'];  
            }  
            
            # Opcje paginacji
            $options = array(  
                'url'        => $this->sciezka.'?page=*VAR*',  
                'db_handle'  => MojeKlasy_PolaczenieBazaPDO::polaczenie(),
            	'results_per_page'=>20,   //ilośc wynikow na stronie tak jak w chw pole select np 5,10,20   
                
                'text_prev'                     => '&laquo; <<',
                'text_next'                     => '>> &raquo;',
                'text_first'                    => '&laquo; Pierwszy',
                'text_last'                     => 'Ostatni &raquo;',
                'class_ellipses'                => 'ellipses',
                'class_dead_links'              => 'dead-link',
                'class_live_links'              => 'tabella',
                'class_current_page'            => 'tabella selected',
                'class_ul'                      => 'pagination',
                'class_live_links_order'        => 'tabella', //naglowki do sortowania  

                //sortowania
                'order'      					=> $page_order,                       
                'order_type' 					=> $page_order_type,
            	'debug'      					=> true  
            );
            
            # Jakie kolumny mam wyświetlić (jak mają się nazywać nagłówki oraz czy mam sortować po kolumnie)
            # jezeli mam sortowac po kolumnie to musze dla wiersza przypisac klucz nr_kolumny z wartoscia
            # dzięki temu w zapytaniu kolejność elementów w selekcie nie ma znaczenia
            $sortable[1]['nazwa']='nazwa';
            $sortable[1]['nr_kolumny']=1;
            $sortable[2]['nazwa']='populacja';
            $sortable[2]['nr_kolumny']=2;
            $sortable[3]['nazwa']='test';
            
            # paginate(int $surrent_page, string $query, array $options)   
            $paginate = new MojeKlasy_SortableAjax( $page, 'SELECT name, population,zaznaczone,id FROM city ', $options,$sortable );
            
          
    // wyswietlenie  ajaxowych smieci musi byc realizowane tylko raz i dla tego nie moze byc za kazdym wywolaniem ajax tez wywolywane
       if($flaga_ajax==false)
       {
     		$paginate->initAjax();
       }
       
           // $widok->wynikiPaginacja( $paginate );        
            
    	$testt='fsdsd';
       $this->view->test=$testt;
       $this->view->paginate=$paginate;
       
    }

    
    /**
     * Standardowy data grid z sortowania z wykorzystaniem mojej klasy
     */
 	public function datagridAction()
    {
    	# ROUTING PROSTY
    	if(isset($_GET['page']))  
        {  
            $page = $_GET['page'];  
        }  
        else  
        {  
            $page = 1;  
        }  

        $page_order = null;  
        $page_order_type= null;  
        # kontroler sortowanie 
        if(isset($_GET['order']) && isset($_GET['type']) )  
        {  
            $page_order = $_GET['order'];  
            $page_order_type= $_GET['type'];  
        }  
        
        # Opcje paginacji
        $options = array(  
            'url'        => $this->sciezka.'?page=*VAR*',  //mozliwe ze poczatku nie trza
            'db_handle'  => MojeKlasy_PolaczenieBazaPDO::polaczenie(),
        	//  'results_per_page'=>20   ilośc wynikow na stronie tak jak w chw pole select np 5,10,20   
            
            'text_prev'                     => '&laquo; <<',
            'text_next'                     => '>> &raquo;',
            'text_first'                    => '&laquo; Pierwszy',
            'text_last'                     => 'Ostatni &raquo;',
            'class_ellipses'                => 'ellipses',
            'class_dead_links'              => 'dead-link',
            'class_live_links'              => 'tabella_ajax',
            'class_current_page'            => 'tabella_ajax selected',
            'class_ul'                      => 'pagination',
            'class_live_links_order'        => 'tabella_ajax', //naglowki do sortowania  

            //sortowania
            'order'      => $page_order,                       
            'order_type' => $page_order_type 
        );
        
        # Po czym chce sortowac. musi tabica sie zaczynac od 1
        $sortable[1]='nazwa';
        $sortable[2]='populacja';
        
        #paginate(int $surrent_page, string $query, array $options)   
        $paginate = new MojeKlasy_Sortable($page, 'SELECT name, population FROM city ', $options,$sortable );
        $this->view->paginate=$paginate;
        Application_Model_Narzedziowe_CVarDumper::dodaj($options,'Option');   	
    }

    /**
     * Ajaxowe wersja 2 z updatem na danych tez ajaxowym
     */
 	public function datagrid2Action()
    {
    	$flaga_ajax=false;	
    	#uruchominie ajaxowych modulow. Można było ajaxowo wywoływać różne metody akcje, ale tak jest prosciej.
    	if( $_POST['etap']=='ajax' )  
        {  
            $flaga_ajax=true;  
            //  $this->_helper->viewRenderer->setNoRender(); //wtedy nic mi nie zwróci widok ajax ? nie wiem dlaczego
	 		$this->_helper->getHelper('layout')->disableLayout();
        }
      
        if(isset($_POST['page']))  
        {  
            $page = $_POST['page'];  
        }  
        else  
        {  
        	$page = 1;  
        }
 
        $page_order = null;  
        $page_order_type= null;  
        # kontroler sortowanie 
        if(isset($_POST['order']) && isset($_POST['type']) )  
        {  
                $page_order = $_POST['order'];  
                $page_order_type= $_POST['type'];  
        }  
            
        # Opcje paginacji
        $options = array(  
                'url'        => $this->sciezka.'?page=*VAR*',  
                'db_handle'  => MojeKlasy_PolaczenieBazaPDO::polaczenie(),
            	'results_per_page'=>20,   //ilośc wynikow na stronie tak jak w chw pole select np 5,10,20   
                
                'text_prev'                     => '&laquo; <<',
                'text_next'                     => '>> &raquo;',
                'text_first'                    => '&laquo; Pierwszy',
                'text_last'                     => 'Ostatni &raquo;',
                'class_ellipses'                => 'ellipses',
                'class_dead_links'              => 'dead-link',
                'class_live_links'              => 'tabella',
                'class_current_page'            => 'tabella selected',
                'class_ul'                      => 'pagination',
                'class_live_links_order'        => 'tabella', //naglowki do sortowania  

                //sortowania
                'order'      					=> $page_order,                       
                'order_type' 					=> $page_order_type,
            	'debug'      					=> true  
        );
            
        $sortable[1]['nazwa']='nazwa';
        $sortable[1]['nr_kolumny']=1;
        $sortable[2]['nazwa']='populacja';
        $sortable[2]['nr_kolumny']=2;
        $sortable[3]['nazwa']='test';
            
        # paginate(int $surrent_page, string $query, array $options)   
        $paginate = new MojeKlasy_SortableAjax( $page, 'SELECT name, population,zaznaczone,id FROM city ', $options,$sortable ); 
          
        // wyswietlenie  ajaxowych smieci musi byc realizowane tylko raz i dla tego nie moze byc za kazdym wywolaniem ajax tez wywolywane
        if($flaga_ajax==false)
        {
     		$paginate->initAjax();
        }
            
    	$testt='fsdsd';
        $this->view->test=$testt;
        $this->view->paginate=$paginate;
    }
	
    /**
     * Ajax - modyfikacja wartości wiersza - metoda testowa
     * Nie tworzy widoku ale musi byc plik widoku, najprawdopodobniej da sie to ustawic
     * moge debugowac wyniki z ajaxa robie echo w kontrolerze a wyniki wydzie w odpowiedzi fbug ale ich nie rysuje
     */
    public function datagrid2modyfikacjaajaxAction()
    {
    	$value = $_POST['value'];
    	$id = $_POST['id'];
    	
    	$this->_helper->viewRenderer->setNoRender();
	 	$this->_helper->getHelper('layout')->disableLayout();
    	
	 	# logika akcji
	 	$this->polaczenie=MojeKlasy_PolaczenieBazaPDO::polaczenie();
    	$zapytanie="UPDATE `city` SET `zaznaczone`='{$value}' WHERE `id`={$id} LIMIT 1;";
    	$this->polaczenie->query($zapytanie); 
    	
    	# wypisanie wyników. Akcja nie ma widoku
    	echo'wykonano zapytanie;'.$zapytanie;
    	
    }
    
 }
    



